package com.achen.study.controller;

import com.achen.study.entity.Student;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @description:
 * @author: Zhaoliang Chen
 * @time: 2022/3/18
 */
@RestController
public class TestDemoController {


    List list = new ArrayList<Student>();

    int i = 1;


    /**
     * 控制台 cmd 执行：jvisualvm
     * 然后设置这个项目的堆 VM option 大小为： -Xms20M -Xmx20M
     * 启动项目查看 Java Visualvm窗口的监控信息，
     *
     * Eden : S0 : S1 = 8:1:1
     *
     * Young GC 【包含了 Eden S0 S1】，又称为 Minor GC
     * Old GC 又被成为 Major GC ,Major GC在发生时，通常会伴随这个Young GC一起，也就意味着会触发 Full GC
     * Full GC = Old GC + Young GC
     *
     * Full GC 会阻止工作线程的运行，会造成STW 也就是 Stop The World
     *
     * JVM优化的目的就是降低STW发生的频率，从而达到让工作线程最大化运行,
     */
    @GetMapping("/heap")
    public void hello() {
        while (true){
            Student student = new Student(i, i + "号选手", i);
            list.add(student);
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            i++;
            System.out.println(student);
        }

    }
}
